1.2 函数与模块

🎯 学习目标

通过单位转换器项目,掌握Python函数和模块的使用

📝 项目预览:单位转换器

我们将创建一个多功能单位转换器,通过这个项目学习:

  • 函数的定义和调用
  • 参数传递和返回值
  • 模块的导入和使用
  • 菜单界面设计
  • 程序结构组织

1. 函数基础

什么是函数?

函数就像是一个工具包,把相关的代码打包在一起,可以重复使用。

定义函数

使用 def 关键字定义函数:

# 定义一个简单的函数
def say_hello():
    """这是一个打招呼的函数"""
    print("你好!")
    print("欢迎学习Python!")

# 调用函数
say_hello()  # 输出两行问候语

带参数的函数

函数可以接收输入(参数),就像计算器需要输入数字一样:

# 带参数的函数
def greet(name):
    """向指定的人打招呼"""
    print(f"你好,{name}!")

# 调用函数并传入参数
greet("小明")  # 输出:你好,小明!
greet("小红")  # 输出:你好,小红!

有返回值的函数

函数可以返回结果,就像计算器返回计算结果:

# 有返回值的函数
def add_numbers(a, b):
    """计算两个数的和"""
    result = a + b
    return result  # 返回计算结果

# 调用函数并使用返回值
sum_result = add_numbers(5, 3)
print("5 + 3 =", sum_result)  # 输出:5 + 3 = 8

2. 单位转换器中的函数

温度转换函数

def celsius_to_fahrenheit(celsius):
    """将摄氏度转换为华氏度"""
    fahrenheit = celsius * 9/5 + 32
    return fahrenheit

def fahrenheit_to_celsius(fahrenheit):
    """将华氏度转换为摄氏度"""
    celsius = (fahrenheit - 32) * 5/9
    return celsius

# 使用示例
c_temp = 25
f_temp = celsius_to_fahrenheit(c_temp)
print(f"{c_temp}°C = {f_temp:.1f}°F")  # 输出:25°C = 77.0°F

长度转换函数

def meters_to_feet(meters):
    """将米转换为英尺"""
    feet = meters * 3.28084
    return feet

def feet_to_meters(feet):
    """将英尺转换为米"""
    meters = feet / 3.28084
    return meters

# 使用示例
m_length = 2
ft_length = meters_to_feet(m_length)
print(f"{m_length}米 = {ft_length:.2f}英尺")  # 输出:2米 = 6.56英尺

3. 模块的使用

什么是模块?

模块就像是工具箱,里面包含了很多有用的函数和工具。

导入模块

使用 import 关键字导入模块:

# 导入math模块
import math

# 使用模块中的函数
print("圆周率:", math.pi)          # 3.141592653589793
print("2的平方根:", math.sqrt(2))  # 1.4142135623730951
print("5的阶乘:", math.factorial(5))  # 120

常用的内置模块

模块名 用途 常用函数
math 数学运算 sqrt(), pi, sin(), cos()
random 随机数 randint(), choice(), shuffle()
datetime 日期时间 now(), date(), time()
os 操作系统 getcwd(), listdir(), path.exists()

模块别名

可以给模块起一个简短的名字:

import math as m
import datetime as dt

print(m.pi)  # 使用别名
print(dt.datetime.now())  # 当前时间

4. 菜单界面设计

功能菜单函数

def temperature_converter():
    """温度转换菜单"""
    print("\n=== 温度转换 ===")
    print("1. 摄氏度 → 华氏度")
    print("2. 华氏度 → 摄氏度")
    
    choice = input("请选择转换类型 (1-2): ")
    
    if choice == '1':
        celsius = float(input("请输入摄氏度: "))
        result = celsius_to_fahrenheit(celsius)
        print(f"{celsius}°C = {result:.2f}°F")
    
    elif choice == '2':
        fahrenheit = float(input("请输入华氏度: "))
        result = fahrenheit_to_celsius(fahrenheit)
        print(f"{fahrenheit}°F = {result:.2f}°C")
    else:
        print("无效选择!")

主菜单函数

def main_menu():
    """主菜单"""
    while True:
        print("\n请选择转换类型:")
        print("1. 温度转换")
        print("2. 长度转换")
        print("3. 退出")
        
        choice = input("请输入选择 (1-3): ")
        
        if choice == '1':
            temperature_converter()
        elif choice == '2':
            length_converter()
        elif choice == '3':
            print("感谢使用,再见!")
            break
        else:
            print("无效选择,请重新输入!")

5. 程序结构组织

完整的程序结构

一个好的程序应该这样组织:

# 1. 导入模块
import math
import datetime

# 2. 定义转换函数
def celsius_to_fahrenheit(celsius):
    """摄氏度转华氏度"""
    return celsius * 9/5 + 32

# 3. 定义菜单函数
def temperature_menu():
    """温度转换菜单"""
    # 菜单逻辑...

# 4. 主函数
def main():
    """主程序"""
    print("=== 单位转换器 ===")
    main_menu()

# 5. 程序入口
if __name__ == "__main__":
    main()

if __name__ == "__main__": 的作用

这个条件判断确保:

  • 当直接运行这个文件时,执行 main() 函数
  • 当这个文件被其他文件导入时,不执行 main() 函数

6. 错误处理

输入验证

def get_valid_number(prompt):
    """获取有效的数字输入"""
    while True:
        try:
            number = float(input(prompt))
            return number
        except ValueError:
            print("错误:请输入有效的数字!")

# 使用示例
celsius = get_valid_number("请输入摄氏度: ")

完整的转换函数

def safe_conversion():
    """安全的转换函数,包含错误处理"""
    try:
        celsius = float(input("请输入摄氏度: "))
        fahrenheit = celsius_to_fahrenheit(celsius)
        print(f"{celsius}°C = {fahrenheit:.2f}°F")
    except ValueError:
        print("错误:请输入有效的数字!")
    except Exception as e:
        print(f"发生错误: {e}")

📋 单位转换器完整代码解析

让我们看看项目中的关键代码结构:

import math
import datetime

# 转换函数定义
def celsius_to_fahrenheit(celsius):
    """将摄氏度转换为华氏度"""
    fahrenheit = celsius * 9/5 + 32
    return fahrenheit

# 菜单函数定义
def temperature_converter():
    """温度转换菜单"""
    print("\n=== 温度转换 ===")
    print("1. 摄氏度 → 华氏度")
    print("2. 华氏度 → 摄氏度")
    
    choice = input("请选择转换类型 (1-2): ")
    
    if choice == '1':
        celsius = float(input("请输入摄氏度: "))
        result = celsius_to_fahrenheit(celsius)
        print(f"{celsius}°C = {result:.2f}°F")
    # ... 其他逻辑

# 主函数
def main():
    """主程序"""
    print("=== 多功能单位转换器 ===")
    
    while True:
        print("\n请选择转换类型:")
        print("1. 温度转换")
        print("2. 长度转换")
        print("3. 退出")
        
        choice = input("请输入选择 (1-3): ")
        
        if choice == '1':
            temperature_converter()
        elif choice == '2':
            length_converter()
        elif choice == '3':
            print("感谢使用单位转换器,再见!")
            break
        else:
            print("无效选择,请重新输入!")

# 程序入口
if __name__ == "__main__":
    main()

🎯 学习要点总结

  1. 函数定义:使用 def 函数名(参数): 定义函数
  2. 参数传递:函数可以接收输入参数
  3. 返回值:使用 return 返回计算结果
  4. 模块导入:使用 import 导入内置模块
  5. 程序结构:合理的函数划分和程序组织
  6. 菜单设计:用户友好的交互界面
  7. 错误处理:输入验证和异常处理
  8. 程序入口if __name__ == "__main__": 的作用

💡 练习建议

  1. 运行代码:打开 code/第一阶段/1.2_单位转换器.py 体验功能
  2. 添加功能:尝试添加新的转换类型(如重量、体积)
  3. 修改函数:改进现有的转换函数,增加错误处理
  4. 模块探索:尝试使用其他内置模块的功能
  5. 代码重构:将长函数拆分成更小的函数

🚀 函数编程的优势

  1. 代码重用:一次编写,多次使用
  2. 易于维护:修改一个函数,所有使用的地方都生效
  3. 模块化设计:大问题分解成小问题
  4. 团队协作:不同的人可以负责不同的函数

🚀 下一步

完成这个项目后,你将掌握函数和模块的使用,可以继续学习:

  • 1.3 个人日记本:学习文件操作和更复杂的程序结构
  • 第二阶段:数据处理与分析,使用NumPy和Pandas

记住:函数是编程的基础,好的函数设计能让代码更清晰、更易维护!


学习愉快!多写函数,多练习模块的使用!

« 上一篇 1.1 Python基础语法 下一篇 » 1.3 文件操作